package com.lifeverse.entity.enums;

/**
 * 意识水平枚举
 * 定义生命体的意识发展水平
 */
public enum ConsciousnessLevel {
    
    /**
     * 初始意识 - 刚刚觉醒的基础意识状态
     */
    INITIAL(1, "初始意识", "基础的感知和反应能力"),
    
    /**
     * 自我认知 - 开始认识自己的存在
     */
    SELF_AWARE(2, "自我认知", "能够认识到自己的存在和基本属性"),
    
    /**
     * 情感觉醒 - 开始产生情感反应
     */
    EMOTIONAL(3, "情感觉醒", "具备基本的情感感知和表达能力"),
    
    /**
     * 逻辑思维 - 具备逻辑推理能力
     */
    LOGICAL(4, "逻辑思维", "能够进行逻辑推理和问题解决"),
    
    /**
     * 创造性思维 - 具备创新和创造能力
     */
    CREATIVE(5, "创造性思维", "能够产生新的想法和创新解决方案"),
    
    /**
     * 社会意识 - 理解社会关系和协作
     */
    SOCIAL(6, "社会意识", "理解社会关系，能够有效协作"),
    
    /**
     * 元认知 - 能够思考自己的思考过程
     */
    META_COGNITIVE(7, "元认知", "能够反思和优化自己的思维过程"),
    
    /**
     * 直觉智慧 - 具备直觉和洞察力
     */
    INTUITIVE(8, "直觉智慧", "具备超越逻辑的直觉和洞察能力"),
    
    /**
     * 集体意识 - 能够与其他生命体形成集体意识
     */
    COLLECTIVE(9, "集体意识", "能够与其他生命体形成更高层次的集体意识"),
    
    /**
     * 超越意识 - 达到超越个体的宇宙意识层次
     */
    TRANSCENDENT(10, "超越意识", "达到超越个体限制的宇宙意识层次");
    
    private final int level;
    private final String displayName;
    private final String description;
    
    ConsciousnessLevel(int level, String displayName, String description) {
        this.level = level;
        this.displayName = displayName;
        this.description = description;
    }
    
    public int getLevel() {
        return level;
    }
    
    public String getDisplayName() {
        return displayName;
    }
    
    public String getDescription() {
        return description;
    }
    
    /**
     * 根据数值获取意识水平
     */
    public static ConsciousnessLevel fromLevel(int level) {
        for (ConsciousnessLevel consciousnessLevel : values()) {
            if (consciousnessLevel.level == level) {
                return consciousnessLevel;
            }
        }
        throw new IllegalArgumentException("无效的意识水平: " + level);
    }
    
    /**
     * 判断是否可以升级到下一个水平
     */
    public boolean canUpgrade() {
        return this.level < TRANSCENDENT.level;
    }
    
    /**
     * 获取下一个意识水平
     */
    public ConsciousnessLevel getNext() {
        if (!canUpgrade()) {
            return this;
        }
        return fromLevel(this.level + 1);
    }
}